using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialStatisticsTools._MeasuringGeographicDistributions
{
    /// <summary>
    /// <para>Standard Distance</para>
    /// <para>Measures the degree to which features are concentrated or dispersed around the geometric mean center.</para>
    /// <para>测量要素在几何平均中心周围的集中或分散程度。</para>
    /// </summary>    
    [DisplayName("Standard Distance")]
    public class StandardDistance : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public StandardDistance()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_Input_Feature_Class">
        /// <para>Input Feature Class</para>
        /// <para>A feature class containing a distribution of features for which the standard distance will be calculated.</para>
        /// <para>包含将计算其标准距离的要素分布的要素类。</para>
        /// </param>
        /// <param name="_Output_Standard_Distance_Feature_Class">
        /// <para>Output Standard Distance Feature Class</para>
        /// <para>A polygon feature class that will contain a circle polygon for each input center. These circle polygons graphically portray the standard distance at each center point.</para>
        /// <para>一个面要素类，将包含每个输入中心的圆形面。这些圆多边形以图形方式描绘了每个中心点的标准距离。</para>
        /// </param>
        /// <param name="_Circle_Size">
        /// <para>Circle Size</para>
        /// <para><xdoc>
        ///   <para>The size of output circles in standard deviations. The default circle size is 1; valid choices are 1, 2, or 3 standard deviations.</para>
        ///   <bulletList>
        ///     <bullet_item>1 standard deviation—1 standard deviation</bullet_item><para/>
        ///     <bullet_item>2 standard deviations—2 standard deviations</bullet_item><para/>
        ///     <bullet_item>3 standard deviations—3 standard deviations</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>以标准差表示的输出圆的大小。默认圆大小为 1;有效选项为 1、2 或 3 个标准差。</para>
        ///   <bulletList>
        ///     <bullet_item>1 个标准差—1 个标准差</bullet_item><para/>
        ///     <bullet_item>2 个标准差 - 2 个标准差</bullet_item><para/>
        ///     <bullet_item>3 个标准差 - 3 个标准差</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public StandardDistance(object _Input_Feature_Class, object _Output_Standard_Distance_Feature_Class, _Circle_Size_value _Circle_Size)
        {
            this._Input_Feature_Class = _Input_Feature_Class;
            this._Output_Standard_Distance_Feature_Class = _Output_Standard_Distance_Feature_Class;
            this._Circle_Size = _Circle_Size;
        }
        public override string ToolboxName => "Spatial Statistics Tools";

        public override string ToolName => "Standard Distance";

        public override string CallName => "stats.StandardDistance";

        public override List<string> AcceptEnvironments => ["MResolution", "MTolerance", "XYResolution", "XYTolerance", "ZDomain", "ZResolution", "ZTolerance", "geographicTransformations", "outputCoordinateSystem", "outputMFlag", "outputZFlag", "outputZValue", "qualifiedFieldNames", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_Input_Feature_Class, _Output_Standard_Distance_Feature_Class, _Circle_Size.GetGPValue(), _Weight_Field, _Case_Field];

        /// <summary>
        /// <para>Input Feature Class</para>
        /// <para>A feature class containing a distribution of features for which the standard distance will be calculated.</para>
        /// <para>包含将计算其标准距离的要素分布的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Input_Feature_Class { get; set; }


        /// <summary>
        /// <para>Output Standard Distance Feature Class</para>
        /// <para>A polygon feature class that will contain a circle polygon for each input center. These circle polygons graphically portray the standard distance at each center point.</para>
        /// <para>一个面要素类，将包含每个输入中心的圆形面。这些圆多边形以图形方式描绘了每个中心点的标准距离。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Standard Distance Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Output_Standard_Distance_Feature_Class { get; set; }


        /// <summary>
        /// <para>Circle Size</para>
        /// <para><xdoc>
        ///   <para>The size of output circles in standard deviations. The default circle size is 1; valid choices are 1, 2, or 3 standard deviations.</para>
        ///   <bulletList>
        ///     <bullet_item>1 standard deviation—1 standard deviation</bullet_item><para/>
        ///     <bullet_item>2 standard deviations—2 standard deviations</bullet_item><para/>
        ///     <bullet_item>3 standard deviations—3 standard deviations</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>以标准差表示的输出圆的大小。默认圆大小为 1;有效选项为 1、2 或 3 个标准差。</para>
        ///   <bulletList>
        ///     <bullet_item>1 个标准差—1 个标准差</bullet_item><para/>
        ///     <bullet_item>2 个标准差 - 2 个标准差</bullet_item><para/>
        ///     <bullet_item>3 个标准差 - 3 个标准差</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Circle Size")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _Circle_Size_value _Circle_Size { get; set; }

        public enum _Circle_Size_value
        {
            /// <summary>
            /// <para>1 standard deviation</para>
            /// <para>1 standard deviation—1 standard deviation</para>
            /// <para>1 个标准差—1 个标准差</para>
            /// </summary>
            [Description("1 standard deviation")]
            [GPEnumValue("1_STANDARD_DEVIATION")]
            _1_STANDARD_DEVIATION,

            /// <summary>
            /// <para>2 standard deviations</para>
            /// <para>2 standard deviations—2 standard deviations</para>
            /// <para>2 个标准差 - 2 个标准差</para>
            /// </summary>
            [Description("2 standard deviations")]
            [GPEnumValue("2_STANDARD_DEVIATIONS")]
            _2_STANDARD_DEVIATIONS,

            /// <summary>
            /// <para>3 standard deviations</para>
            /// <para>3 standard deviations—3 standard deviations</para>
            /// <para>3 个标准差 - 3 个标准差</para>
            /// </summary>
            [Description("3 standard deviations")]
            [GPEnumValue("3_STANDARD_DEVIATIONS")]
            _3_STANDARD_DEVIATIONS,

        }

        /// <summary>
        /// <para>Weight Field</para>
        /// <para>The numeric field used to weight locations according to their relative importance.</para>
        /// <para>用于根据位置的相对重要性对位置进行加权的数值字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Weight Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Weight_Field { get; set; } = null;


        /// <summary>
        /// <para>Case Field</para>
        /// <para>Field used to group features for separate standard distance calculations. The case field can be of integer, date, or string type.</para>
        /// <para>用于对要素进行分组以进行单独标准距离计算的字段。case 字段可以是整数、日期或字符串类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Case Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Case_Field { get; set; } = null;


        public StandardDistance SetEnv(object MResolution = null, object MTolerance = null, object XYResolution = null, object XYTolerance = null, object ZDomain = null, object ZResolution = null, object ZTolerance = null, object geographicTransformations = null, object outputCoordinateSystem = null, object outputMFlag = null, object outputZFlag = null, object outputZValue = null, bool? qualifiedFieldNames = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(MResolution: MResolution, MTolerance: MTolerance, XYResolution: XYResolution, XYTolerance: XYTolerance, ZDomain: ZDomain, ZResolution: ZResolution, ZTolerance: ZTolerance, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, outputMFlag: outputMFlag, outputZFlag: outputZFlag, outputZValue: outputZValue, qualifiedFieldNames: qualifiedFieldNames, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}